Программирование драйверов Windows

Секция [ClassInstall32]


Разработчик драйвера может создать собственный класс устройств (с собственным GUID, созданным при помощи программы GuidGen) и использовать его при установке своего драйвера. Данная операция не является сложной и выполняется при помощи секции [ClassInstall32], например:

[Version] Signature="$Chicago$" Class=ExampleDrvClass ClassGuid={DC16BE99-C06B-4801-A144-43A98BB99052} . . . [ClassInstall32] Addreg=ExampleClassReg

[ExampleClassReg] ; секция изменений в Реестре HKR,,,0,%ClassName% ; имя класса вводится через маркер %ClassName%

[Strings] ; Дополняем секцию значением маркера ClassName="Example's Driver Class" . . .

Рис. 12.2

Новый класс в окне Диспетчера устройств

Внесем приведенные выше дополнения в inf-файл, предназначенный для установки драйвера Example.sys, см. главу 3. В результате установки Мастером установки появится новый класс с указанным GUID в разделе HKLM\System\CurrentControlSet\Control\Class

Системного Реестра, см. рисунок 12.3. В его подразделе будет указан параметр Class, содержащий значение имени "ExampleDrvClass", и один вложенный подраздел \0000, описывающий установленный драйвер Example.Sys, см. рисунок 12.4.



Рис. 12.3.

Новый класс в окне Редактора Системного Реестра

Рис. 12.4.

Вновь установленный драйвер класса ExampleClassReg

Открывая описания классов в Системном Реестре при помощи Редактора Реестра, можно увидеть, что другие классы имеют существенно больше параметров, чем создано для нового класса ExampleDrvClass при помощи указанных выше записей. Все недостающие параметры можно ввести в секции описания изменений в Реестре, в данном случае &#8212 [ExampleClassReg].

Имя секции [ClassInstall32] может быть декорировано при помощи суффиксов .nt, .ntx86 и .ntia64 для того, чтобы ограничить применимость данной секции.

Помимо директивы AddReg, обязательной для секции [ClassInstall32], в данной секции могут присутствовать некоторые другие директивы (следует обратиться к документации DDK), из которых самой важной является директива CopyFiles.

Синтаксис директивы CopyFiles совершенно аналогичен тому, который используется в секции [DDInstall], и вводит информацию о копировании файлов, если таковые необходимы для завершения установки нового класса.

В том случае, если при установке нового класса устройств еще требуется установить и некоторые драйверы, предусмотрена возможность их установки с использованием секции [ClassInstall32.Services] ([ClassInstall32.Xxx.Services]), использование которой аналогично [DDInstall.Services].

Созданный класс легко и безболезненно удаляется из Системного Реестра (в интерактивном Редакторе), если только в системе не осталось устройств данного класса.



Содержание раздела